// 解析日期
export function getBirth(value) {
  if (value == null || value == "") return "";// 如果value为null或空字符串，则直接返回空字符串
  const date = new Date(value);// 使用Date对象解析value
  const year = date.getFullYear();//获取年份
  const month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;// 获取月份，如果月份小于10，则在前面添加0
  const day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();// 获取日期，如果日期小于10，则在前面添加0
  return year + "-" + month + "-" + day;// 返回格式化后的日期字符串，格式为YYYY-MM-DD
}

/**
 * 表格时间格式化
 */
export function formatDate(cellValue) {
  if (cellValue == null || cellValue == "") return "";// 如果cellValue为null或空字符串，则直接返回空字符串
  const date = new Date(cellValue);// 使用Date对象解析
  const year = date.getFullYear();// 获取年份
  const month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;// 获取月份，如果月份小于10，则在前面添加0
  const day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); // 获取日期，如果日期小于10，则在前面添加0 
  const hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(); // 获取小时，如果小时小于10，则在前面添加0
  const minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();// 获取分钟，如果分钟小于10，则在前面添加0
  const seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();// 获取秒数，如果秒数小于10，则在前面添加0
  return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;// 返回格式化后的日期时间字符串，格式为YYYY-MM-DD HH:mm:ss }
}

// 解析歌词
export function parseLyric(text) {
  let lines = text.split("\n");// 将text按换行符分割成行数组
  const pattern = /\[\d{2}:\d{2}.(\d{3}|\d{2})\]/g;// 匹配时间标签的正则表达式
  const result = [];// 存储解析后的歌词结果

  // 对于歌词格式不对的特殊处理
  if (!/\[.+\]/.test(text)) {
    return [[0, text]];
  } // 对于歌词格式不对的特殊处理，返回一个包含时间为0的歌词的数组


  // 去除行数组开头不包含时间标签的行
  while (!pattern.test(lines[0])) {
    lines = lines.slice(1);
  }

  lines[lines.length - 1].length === 0 && lines.pop(); // 去除行数组末尾的空行
  for (const item of lines) {
    const time = item.match(pattern); // 匹配行内的时间标签，存在time数组中
    const value = item.replace(pattern, ""); // 去除行内的时间标签，获取歌词内容
    for (const item1 of time) {
      const t = item1.slice(1, -1).split(":");// 将时间标签转化为分钟和秒数，存在t数组中
      if (value !== "") {
        result.push([parseInt(t[0], 10) * 60 + parseFloat(t[1]), value]);// 将分钟和秒数转化为总秒数，并与歌词内容一起存入result数组中
      }
    }
  }
  result.sort((a, b) => a[0] - b[0]);// 根据时间从小到大排序
  return result;// 返回解析后的歌词数组，每个元素为一个包含时间和歌词内容的数组
}

// 解析播放时间
export function formatSeconds(value) {
  let theTime = parseInt(value);// 将value转化为整数，表示总秒数
  let theTime1 = 0;// 小时
  let theTime2 = 0; // 分钟
  if (theTime > 60) {
    theTime1 = parseInt((theTime / 60).toString()); // 计算小时数
    theTime = parseInt((theTime % 60).toString()); // 计算剩余的秒数
    // 是否超过一个小时
    if (theTime1 > 60) {
      theTime2 = parseInt((theTime1 / 60).toString()); // 计算分钟数
      theTime1 = 60; // 分
    }
  }
  // 多少秒
  let result = "";// 存储格式化后的播放时间字符串
  if (parseInt(theTime.toString()) < 10)// 如果剩余的秒数小于10，则在前面添加0
  {
    result = "0:0" + parseInt(theTime.toString());
  } else {
    result = "0:" + parseInt(theTime.toString());
  }
  // 多少分钟时
  if (theTime1 > 0)// 如果有分钟数
  {
    if (parseInt(theTime.toString()) < 10) // 如果剩余的秒数小于10，则在前面添加0
    {
      result = "0" + parseInt(theTime.toString());
    } else {
      result = parseInt(theTime.toString()).toString();
    }
    result = parseInt(theTime1.toString()) + ":" + result;// 拼接分钟和剩余的秒数
  }
  // 多少小时时
  if (theTime2 > 0)  // 如果有小时数
  {
    if (parseInt(theTime.toString()) < 10) // 如果剩余的秒数小于10，则在前面添加0
    {
      result = "0" + parseInt(theTime.toString());
    } else {
      result = parseInt(theTime.toString()).toString();
    }
    result = parseInt(theTime2.toString()) + ":" + parseInt(theTime1.toString()) + ":" + result;// 拼接小时、分钟和剩余的秒数
  }
  return result; // 返回格式化后的播放时间字符串
}
